extends Resource
class_name EquipmentRange

# 装备基础属性范围
class BaseRange:
    var min_value: int
    var max_value: int
    
    func _init(最小值: int, 最大值: int):
        min_value = 最小值
        max_value = 最大值
    
    func get_random() -> int:
        return randi_range(min_value, max_value)

# 不同品质的属性倍率
const 品质倍率 = {
    "普通": 1.0,
    "精良": 1.2,
    "稀有": 1.5,
    "史诗": 2.0,
    "传说": 3.0
}

# 获取装备属性范围
static func 获取属性范围(部位: String) -> Dictionary:
    var 装备属性范围 = {
        "武器": {
            "攻击力": BaseRange.new(8, 12),
            "防御力": BaseRange.new(0, 0),
            "生命值": BaseRange.new(0, 0)
        },
        "头盔": {
            "攻击力": BaseRange.new(0, 0),
            "防御力": BaseRange.new(3, 5),
            "生命值": BaseRange.new(20, 30)
        },
        "胸甲": {
            "攻击力": BaseRange.new(0, 0),
            "防御力": BaseRange.new(8, 12),
            "生命值": BaseRange.new(40, 60)
        },
        "护腿": {
            "攻击力": BaseRange.new(0, 0),
            "防御力": BaseRange.new(5, 8),
            "生命值": BaseRange.new(30, 45)
        },
        "靴子": {
            "攻击力": BaseRange.new(0, 0),
            "防御力": BaseRange.new(3, 5),
            "生命值": BaseRange.new(20, 30)
        }
    }
    return 装备属性范围[部位]

# 生成装备属性
static func 生成装备属性(部位: String, 品质: String, 等级: int) -> Dictionary:
    var 属性 = {}
    var 部位属性 = 获取属性范围(部位)
    var 倍率 = 品质倍率[品质] * (1 + (等级 - 1) * 0.1)
    
    属性.base_attack = roundi(部位属性.攻击力.get_random() * 倍率)
    属性.base_defense = roundi(部位属性.防御力.get_random() * 倍率)
    属性.base_health = roundi(部位属性.生命值.get_random() * 倍率)
    
    return 属性

# 生成装备价格
static func 生成装备价格(品质: String, 等级: int) -> int:
    var 基础价格 = 100
    var 品质加成 = 品质倍率[品质]
    var 等级加成 = 1 + (等级 - 1) * 0.2
    
    return roundi(基础价格 * 品质加成 * 等级加成)

# 生成完整装备
static func 生成装备(部位: String, 品质: String = "普通", 等级: int = 1) -> EquipmentData:
    var 装备 = EquipmentData.new()
    var 属性 = 生成装备属性(部位, 品质, 等级)
    
    装备.slot = 部位
    装备.quality = 品质
    装备.level = 等级
    装备.base_attack = 属性.base_attack
    装备.base_defense = 属性.base_defense
    装备.base_health = 属性.base_health
    装备.price = 生成装备价格(品质, 等级)
    
    # 设置装备名称
    装备.name = "%s之%s" % [品质, 部位]
    装备.description = "这是一件%s品质的%s" % [品质, 部位]
    
    return 装备 

# 根据现有装备生成新装备
static func 根据装备生成(原装备: EquipmentData, 新品质: String = "", 新等级: int = 0) -> EquipmentData:
    var 新装备 = EquipmentData.new()
    
    # 复制基本信息
    新装备.name = 原装备.name
    新装备.icon = 原装备.icon
    新装备.description = 原装备.description
    新装备.slot = 原装备.slot
    #var quality=["普通","精良","稀有","史诗","传说"]
    # 设置新的品质和等级
    新装备.quality = 新品质 if 新品质!="" else  原装备.quality
    新装备.level = 新等级 if 新等级 > 0 else 原装备.level
    
    # 计算新属性
    var 原始倍率 = 品质倍率[原装备.quality] * (1 + (原装备.level - 1) * 0.1)
    var 新倍率 = 品质倍率[新装备.quality] * (1 + (新装备.level - 1) * 0.1)
    var 属性倍率 = 新倍率 / 原始倍率
    
    # 应用新属性
    新装备.base_attack = roundi(原装备.base_attack * 属性倍率)
    新装备.base_defense = roundi(原装备.base_defense * 属性倍率)
    新装备.base_health = roundi(原装备.base_health * 属性倍率)
    
    # 计算新价格
    新装备.price = 生成装备价格(新装备.quality, 新装备.level)
    
    # 重置强化等级和锁定状态
    新装备.strengthen_level = 0
    新装备.is_locked = false
    
    return 新装备

# 随机生成装备
static func 随机生成装备(最低等级: int = 1, 最高等级: int = 100) -> EquipmentData:
    # 随机选择部位
    var 所有部位 = ["武器", "头盔", "胸甲", "护腿", "靴子"]
    var 随机部位 = 所有部位[randi() % 所有部位.size()]
    
    # 随机选择品质（根据权重）
    var 品质权重 = {
        "普通": 50,
        "精良": 30,
        "稀有": 15,
        "史诗": 4,
        "传说": 1
    }
    var 总权重 = 0
    for 权重 in 品质权重.values():
        总权重 += 权重
    
    var 随机数 = randi() % 总权重
    var 累计权重 = 0
    var 随机品质 = "普通"
    
    for 品质 in 品质权重:
        累计权重 += 品质权重[品质]
        if 随机数 < 累计权重:
            随机品质 = 品质
            break
    
    # 随机等级
    var 随机等级 = randi_range(最低等级, 最高等级)
    
    # 生成装备
    return 生成装备(随机部位, 随机品质, 随机等级) 
##强化装备
static func 强化装备(装备:EquipmentData,强化石:StrengthenStone)->EquipmentData:
    var 新装备 = 装备.duplicate(true)
    
    # 计算强化加成
    var 强化加成 = 新装备.strengthen_level * 0.1  # 每级增加10%属性
    
    # 在原有属性基础上增加强化加成
    新装备.base_attack = roundi(新装备.base_attack * (1 + 强化加成))
    新装备.base_defense = roundi(新装备.base_defense * (1 + 强化加成))
    新装备.base_health = roundi(新装备.base_health * (1 + 强化加成))
    
    # 更新价格
    新装备.price = roundi(新装备.price * (1 + 强化加成))
    
    # 保持炼丹炉状态
    新装备.is_in_furnace = true
    
    print("强化成功！等级：+", 新装备.strengthen_level)
    print("属性提升：攻击力 %d, 防御力 %d, 生命值 %d" % [
        新装备.base_attack - 装备.base_attack,
        新装备.base_defense - 装备.base_defense,
        新装备.base_health - 装备.base_health
    ])
    
    return 新装备

